The state field should represent the state before the event, like on X11.
authorTor Lillqvist <tml@novell.com>
Wed, 30 Mar 2005 08:07:45 +0000 (08:07 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 30 Mar 2005 08:07:45 +0000 (08:07 +0000)
2005-03-30  Tor Lillqvist  <tml@novell.com>

* gdk/win32/gdkevents-win32.c (build_pointer_event_state): The
state field should represent the state before the event, like on
X11. (#169753)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gdk/win32/gdkevents-win32.c

index 06fafe0b19c9233526ba8a3da140a32bddd2b105..2d94132e178dd7862a936165fe1a12a49c01514a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-30  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c (build_pointer_event_state): The
+       state field should represent the state before the event, like on
+       X11. (#169753)
+
 2005-03-29  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_set_visible_func): 
index 06fafe0b19c9233526ba8a3da140a32bddd2b105..2d94132e178dd7862a936165fe1a12a49c01514a 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-30  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c (build_pointer_event_state): The
+       state field should represent the state before the event, like on
+       X11. (#169753)
+
 2005-03-29  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_set_visible_func): 
index 06fafe0b19c9233526ba8a3da140a32bddd2b105..2d94132e178dd7862a936165fe1a12a49c01514a 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-30  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c (build_pointer_event_state): The
+       state field should represent the state before the event, like on
+       X11. (#169753)
+
 2005-03-29  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_set_visible_func): 
index ed214cb8982314f2ee1b15e754eddc1d658b76d9..59e67758082be1ec9d3a6c85cfde698b8841d8b4 100644 (file)
@@ -954,22 +954,41 @@ build_pointer_event_state (MSG *msg)
   gint state;
   
   state = 0;
+
   if (msg->wParam & MK_CONTROL)
     state |= GDK_CONTROL_MASK;
-  if (msg->wParam & MK_LBUTTON)
+
+  if ((msg->message != WM_LBUTTONDOWN &&
+       (msg->wParam & MK_LBUTTON)) ||
+      msg->message == WM_LBUTTONUP)
     state |= GDK_BUTTON1_MASK;
-  if (msg->wParam & MK_MBUTTON)
+
+  if ((msg->message != WM_MBUTTONDOWN &&
+       (msg->wParam & MK_MBUTTON)) ||
+      msg->message == WM_MBUTTONUP)
     state |= GDK_BUTTON2_MASK;
-  if (msg->wParam & MK_RBUTTON)
+
+  if ((msg->message != WM_RBUTTONDOWN &&
+       (msg->wParam & MK_RBUTTON)) ||
+      msg->message == WM_RBUTTONUP)
     state |= GDK_BUTTON3_MASK;
-  if (msg->wParam & MK_XBUTTON1)
+
+  if (((msg->message != WM_XBUTTONDOWN || HIWORD (msg->wParam) != XBUTTON1) &&
+       (msg->wParam & MK_XBUTTON1)) ||
+      (msg->message == WM_XBUTTONUP && HIWORD (msg->wParam) == XBUTTON1))
     state |= GDK_BUTTON4_MASK;
-  if (msg->wParam & MK_XBUTTON2)
+
+  if (((msg->message != WM_XBUTTONDOWN || HIWORD (msg->wParam) != XBUTTON2) &&
+       (msg->wParam & MK_XBUTTON2)) ||
+      (msg->message == WM_XBUTTONUP && HIWORD (msg->wParam) == XBUTTON2))
     state |= GDK_BUTTON5_MASK;
+
   if (msg->wParam & MK_SHIFT)
     state |= GDK_SHIFT_MASK;
+
   if (GetKeyState (VK_MENU) < 0)
     state |= GDK_MOD1_MASK;
+
   if (GetKeyState (VK_CAPITAL) & 0x1)
     state |= GDK_LOCK_MASK;